package autorization;

/**
 * Интерфейс, который должен придерживаться каждый класс играющий роль таблицы правил
 * @author Volk ID = 1001
 * @version 0.1 Базовый функционал интерфейса
 */
public interface IRulesTable {

    //---------------Перегрузка методов добавления записи-----------
    /**
     * Добавить правило в таблицу
     * @param name - УНИКАЛЬНОЕ имя правила
     * @param type - тип правила
     * @param tooltip - текстовая подсказка, поясняющая суть правила
     * @return -1 в случае если правило с таким именем уже зарегистрировано, в случае успеха возвращает ID правила
     */
    public long addRule (String name, int type, String tooltip);
    /**
     * Добавить правило в таблицу
     * @param rule - класс правила
     * @return -1 в случае если правило с таким именем уже зарегистрировано, в случае успеха возвращает ID правила
     */
    public long addRule (Rule rule);
    //---------------------------------------------------------------

    //---------------Перегрузка методов удаления записи--------------
    /**
     * Удаление правила из таблицы
     * @param ID - идентификатор правила
     * @return true - удаление прошло успешно, false - отказ в удалении в силу того что правило с указанным идентификаторо не зарегистрировано в таблице
     */
    public boolean deleteRule (long ID);
    /**
     * Удаление правила из таблицы
     * @param name - уникальное имя правила
     * @return - удаление прошло успешно, false - отказ в удалении в силу того что правило с указанным именем не зарегистрировано в таблице
     */
    public boolean deleteRule (String name);
    //---------------------------------------------------------------

    /**
     * Получить идентификатор правила по имени
     * @param name - имя правила
     * @return в случае успеха идентификатор правила, но в случае если правило с таким именем не зарегистрировано в таблице возвращает -1
     */
    public long getID (String name);


    //--------------Перегрузка методов проверки наличия правила в таблице------
    /**
     * Проверяет наличие правила в таблице
     * @param name - уникальное умя правила
     * @return true - правило присутствует в таблице, false - правила нет в таблице
     */
    public boolean isRule (String name);
    /**
     * Проверяет наличие правила в таблице
     * @param ID - уникальный идентификато правила
     * @return true - правило присутствует в таблице, false - правила нет в таблице
     */
    public boolean isRule (long ID);
    //-------------------------------------------------------------------------

    /**
     * Удалить все записи из таблицы
     */
    public void clear ();

    //----------------Перегрузка методов получения правила из таблицы------
    /**
     * Получить правило из таблицы
     * @param ID - идентификатор правила
     * @return правило в случае успеха, null в случае если правила с таким именем нет в таблице
     */
    public Rule getRule (long ID);
    /**
     * Получить правило из таблицы
     * @param name - имя правила
     * @return правило в случае успеха, null в случае если правила с таким именем нет в таблице
     */
    public Rule getRule (String name);
    //---------------------------------------------------------------------

    /**
     * Модифицировать правила в таблице
     * @param rule - модифицированный объект правила
     * @return true - правило изменено, false - правило в заданными параметрами нет в таблице
     */
    public boolean modifyRule (Rule rule);

    /**
     * Получить колечество правил в таблице
     * @return
     */
    public int getSize();
}

